package leetcode

import (
	"gorm.io/gorm"
	"time"
)

/*
CREATE TABLE `order` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `userId` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
  `uid` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户uid',
  `orderId` bigint unsigned NOT NULL COMMENT '订单id',
  `subject` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '订单描述',
  `amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '支付金额',
  `monthCount` int NOT NULL DEFAULT '0' COMMENT '购买时长，按月',
  `dayCount` int NOT NULL DEFAULT '0' COMMENT '购买时长，按天',
  `startDate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '开始日期',
  `endDate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '结束日期',
  `payStatus` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '支付状态:待支付(pending),支付中(processing),支付完成(paid),支付失败(fail)',
  `paidTime` timestamp NULL DEFAULT NULL COMMENT '支付完成时间',
  `failTime` timestamp NULL DEFAULT NULL COMMENT '支付失败时间',
  `cancelTime` timestamp NULL DEFAULT NULL COMMENT '订单取消时间',
  `status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '订单状态：1、正常；2、取消',
  `version` int NOT NULL DEFAULT '0' COMMENT '版本，0默认，1体验',
  `createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `order_id` (`orderId`),
  KEY `index_user_id` (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=177 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='中国用户订单表';
 请写一个gorm的model结构体和json的tag
*/

type Order struct {
	ID        int64    `gorm:"column:id" json:"id"` // 主键Id
	UserId    int64    `gorm:"column:userId" json:"userId"` // 用户id
	Uid       int64    `gorm:"column:uid" json:"uid"` // 用户uid
	OrderId   int64    `gorm:"column:orderId" json:"orderId"` // 订单id
	Subject   string   `gorm:"column:subject" json:"subject"` // 订单描述
	Amount    float64  `gorm:"column:amount" json:"amount"` // 支付金额
	MonthCount int      `gorm:"column:monthCount" json:"monthCount"` // 购买时长，按月
	DayCount   int      `gorm:"column:dayCount" json:"dayCount"` // 购买时长，按天
	StartDate  string   `gorm:"column:startDate" json:"startDate"` // 开始日期
	EndDate    string   `gorm:"column:endDate" json:"endDate"` // 结束日期
	PayStatus  string   `gorm:"column:payStatus" json:"payStatus"` // 支付状态:待支付(pending),支付中(processing),支付完成(paid),支付失败(fail)
	PaidTime   time.Time `gorm:"column:paidTime" json:"paidTime"` // 支付完成时间
	FailTime   time.Time `gorm:"column:failTime" json:"failTime"` // 支付失败时间
	CancelTime time.Time `gorm:"column:cancelTime" json:"cancelTime"` // 订单取消时间
	Status     int      `gorm:"column:status" json:"status"` // 订单状态：1、正常；2、取消
	Version    int      `gorm:"column:version" json:"version"` // 版本，0默认，1体验
	CreatedAt  time.Time `gorm:"column:createdAt" json:"createdAt"` // 创建时间
	UpdatedAt  time.Time `gorm:"column:updatedAt" json:"updatedAt"` // 更新时间
}

func (Order) TableName() string {
	return "order"
}

func (Order) GetOrder(orderId int64, db *gorm.DB) (Order, error) {
	var order Order
	err := db.Where("orderId = ?", orderId).First(&order).Error
	return order, err
}
